Networks have not traditionally been programmable entities. Although some programming frameworks may be used to configure networks, the intelligence has always been in the framework, and not the network. It would be useful to put more programmability in each switch and router rather than in the framework, where network operations may be implemented as a series of operations that are reflected into the network hardware. As networks become more complex and the need for them to respond to external changes in near real-time, the current approach of configuring networks at individual devices becomes impractical.